\documentclass{rl}

% Dateikodierung ist latin1
\usepackage[utf8]{inputenc}

\begin{document}

% Nr, Abgabedatum, Gruppenleiter, Gruppenname, Name1...Name4
\Abgabeblatt{1}{08.05.2012}{Tutor}{Gruppenname}%
                {Valentin Peka}{Jonas Hansen}%
                { }%

\section*{Problem 1.1}
\begin{center}
\begin{tabular}{p{45mm}|p{45mm}|p{45mm}}
\textbf{Szenario a)} & \textbf{Szenario b)} & \textbf{Szenario c)}\\
\hline \hline
\emph{Partially observable}. Der Fahrer (agent) kann nicht gleichzeitig die gesamte Umwelt beobachten &
\emph{fully observable}. Alle Positionen jeder Spielfigur zu jeder Zeit bekannt &
\emph{fully observable}. Anordnung der Spielsteine zu jeder Zeit bekannt \\
\hline
\emph{stochastic}. Umwelt wird durch weitere Faktoren als aktuelle Aktion und Status beeinflusst &
\emph{deterministic}. Keine äußere Einflüsse, nur die Aktion des Spieler beeinflusst nächsten Zustand &
\emph{deterministic}. Keine äußere Einflüsse, nur die Aktion des Spieler beeinflusst nächsten Zustand \\
\hline
\emph{episodic}. Jede Fahrt entspricht einer Epsiode mit terminalem Zustand (Supermarkt) &
\emph{episodic}. Jeder Spielzug ist eine Episode  &
\emph{episodic}. Jeder Spielzug ist eine Episode \\
\hline
\emph{dynamic}. Der Straßenverkehr ist dynamisch &
\emph{static}. Spielfeld ändert sich nicht ohne Eingreifen der Spieler &
\emph{static}. Spielfeld ändert sich nicht ohne Eingreifen des Spielers \\
\hline
\emph{continuous time}. Autofahren ist fortlaufend und besteht nicht aus einzelnen Zeitschritten &
\emph{discrete time}. Zeit muss innerhalb eines Zug nicht bestimmt werden. Jeder Zug ein Zeitschritt &
\emph{discrete time}. Spielsteine fallen nicht kontinuierlich sondern in diskreten Schritten \\
\hline
\emph{continuous action}. Lenk- und Bremsvorgänge sind kontinuierlich &
\emph{discrete action}. Spielzüge sind diskrete Bewegungen &
\emph{discrete action}. Diskrete Spielsteinbewegungen (drehen um 90 Grad, verschieben um 1 Einheit \\
\hline
\emph{continuous state}. Geschwindigkeit des Autos und die Radwinkelstellung sind kontinuierliche Größen &
\emph{discrete state}. Positionen der Spielfiguren diskret auf Spielbrett begrenzt &
\emph{discrete state}. Anordnung der Spielsteine diskret festgelegt \\
\hline
\emph{single-agent }. Ein Autofahrer &
\emph{multiple-agent}. Zwei Schachspieler &
\emph{single-agent}. Ein Spieler \\
\hline
\end{tabular}
\end{center}

\section*{Problem 1.2}
\subsection*{a)}
Die Umgebung kann Zustände in Form von ganzzahligen, positiven Werten (inkl. Null) annehmen. Die default-Einstellung sind die Werte 0 bis 20.\\
Der Umfang der Zustände ist über ein Dictionary mit einem Eintrag definiert.
\subsection*{b)}
Der Agent wählt zwischen den Aktionen ``left'' und ``right''.\\
Die Aktionen sind durch eine Liste in einem Tupel in einem Dictionary mit einem Eintrag definiert.
\subsection*{c)}
Die Umgebung ist episodisch.\\
Die terminalen Zustände sind ganz links, also 0 oder ganz rechts, also der höchstmögliche Wert.
\subsection*{d)}
Zuerst wird überprüft ob die Episode abgeschlossen ist, also den Zustand 0 oder den höchstmöglichen Wert erreicht hat. Wenn dies der Fall ist, ist der Reward für den Zustand ungleich 0, also maximal, gleich +10, sonst ist der Reward -10.\\
Wenn der aktuelle Zustand die Episode nicht abschließt ist der Reward -1.
\subsection*{e)}
\begin{center}
 \includegraphics[scale=0.7,keepaspectratio=true]{./1_2_e.png}
\end{center}

\section*{Problem 1.3}
\subsection*{a)}
Die Funktion setActionSpace() der Klasse RandomAgent erweitert die Funktion setActionSpace() der Superklasse AgentBase. Diese Funktion weist der Agenten-Instanz eine Variable actionSpace zu und definiert diese mit dem Übergabeparameter actionSpace.
\subsection*{b)}
Durch die Zufallsauswahl eines Wertes aus dem actionSpace für jede Aktionsart und diese werden in einem Dictionary abgespeichert.

\section*{Problem 1.4}
Implementierung des Finite Horizon Model:
\begin{listingcont}
def finiteHorizon(rewardList, horizon):
    returnList = []
    for t in range(len(rewardList)):
        returnList.append(sum(rewardList[t:t+horizon]))
    return returnList
\end{listingcont}
  
Implementierung des Infinite Horizon Discounted Model:
\begin{listingcont}
def infiniteHorizonDiscounted(rewardList, gamma):
    returnList = []
    for t in range(len(rewardList)):
        summe = j = 0
        while (t+j < len(rewardList)):
            limit = gamma**(j) * rewardList[t+j]
            summe += limit
            j+=1
        returnList.append(summe)
    return returnList
\end{listingcont}

Implementierung des Average Reward Model:
\begin{listingcont}
def averageReward(rewardList):
    returnList = []
    for t in range(len(rewardList)):
        returnList.append(float(sum(rewardList[t:])) / (len(rewardList)-t))
    return returnList
\end{listingcont}

\begin{center}
 \includegraphics[scale=0.65,keepaspectratio=true]{./1_4_graph.png}
\end{center}


\end{document}
